//============================================================================================
/**
 * @file	calc_humor.c
 * @brief	機嫌値加算処理
 * @author	NozomuSaito
 * @date	09.03.27
 */
//============================================================================================

#include "common.h"
#include "poketool/poke_tool.h"
#include "poketool/monsno.h"

#include "itemtool/item.h"

#include "poketool/calc_humor.h"

//============================================================================================
/**
 *	機嫌値計算テーブル
 */
//============================================================================================
static const s8	HumorParaTbl[HUMOR_ID_MAX] = {
	40,		//レベルアップ
	8,		//攻撃補助アイテム（スピーダー等）使用
	50,		//ボス戦に参加（ジムリーダー、四天王、チャンプ）
	40,		//技マシン使用
	-80,		//瀕死
	-50,		//どくの連れ歩きによる瀕死
	-100,		//レベル３０差以上の瀕死
	30,		//ボンジュース
};

//--------------------------------------------------------------------------------------------
/**
 * 機嫌値追加
 *
 * @param	pp			ポケモンパラム
 * @param	inAddhumor	加算機嫌値
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void CalcHumor_Add(POKEMON_PARAM * pp, const s8 inAddHumor)
{
	int temp;
	s8 humor;
	humor = PokeParaGet(pp,ID_PARA_humor, NULL);
	temp = humor;
	temp += inAddHumor;

	if (temp > 127){
		temp = 127;
	}else if(temp < -127){
		temp = -127;
	}
	humor = temp;

	PokeParaPut(pp,ID_PARA_humor, &humor);
}

//--------------------------------------------------------------------------------------------
/**
 * アイテムの機嫌値取得
 *
 * @param	item		アイテム番号
 *
 * @retval	humor		機嫌値
 */
//--------------------------------------------------------------------------------------------
s8 CalcHumor_GetItemHumor(u16 item)
{
	s8 humor = 0;
	switch(item){
	case ITEM_HUSIGINAAME:	//ふしぎなアメ
		humor = 40;
		break;
	case ITEM_TIKARANOKONA:	//ちからのこな
		humor = -20;
		break;
	case ITEM_TIKARANONEKKO:	//ちからのねっこ
		humor = -30;
		break;
	case ITEM_BANNOUGONA:	//ばんのうごな
		humor = -20;
		break;
	case ITEM_HUKKATUSOU:	//ふっかつそう
		humor = -40;
		break;
	case ITEM_KITOSAN:		//キトサン
	case ITEM_TAURIN:		//タウリン
	case ITEM_RIZOTIUMU:	//リゾチウム
	case ITEM_INDOMETASIN:	//インドメタシン
	case ITEM_BUROMUHEKISIN:	//ブロムヘキシン
	case ITEM_MAKKUSUAPPU:		//マックスアップ
		humor = 8;
		break;
	case ITEM_EFEKUTOGAADO:
	case ITEM_KURITHIKATTAA:
	case ITEM_PURASUPAWAA:
	case ITEM_DHIFENDAA:
	case ITEM_SUPIIDAA:
	case ITEM_YOKUATAARU:
	case ITEM_SUPESYARUAPPU:
	case ITEM_SUPESYARUGAADO:
		humor = 10;
		break;
	}

	return humor;
}

//--------------------------------------------------------------------------------------------
/**
 * アイテムによる機嫌値増減
 *
 * @param	pp		ポケモンのデータ
 * @param	item	アイテム
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void CalcHumor_ItemHumorUp(POKEMON_PARAM * pp, u16 item)
{
	s8 humor = 0;
	humor = CalcHumor_GetItemHumor(item);

	if (humor != 0){
		CalcHumor_Add(pp, humor);
	}
}

//--------------------------------------------------------------------------------------------
/**
 * 機嫌値増減
 *
 * @param	pp		ポケモンのデータ
 * @param	id		機嫌値ID
 *
 * @retval	none
 */
//--------------------------------------------------------------------------------------------
void CalcHumor_Calc(POKEMON_PARAM *pp, HUMOR_ID id)
{
	u16	monsno;
	s8	humor;
	s8	humortmp;
	int temp;

	monsno=PokeParaGet(pp,ID_PARA_monsno_egg,NULL);
	if((monsno==0)||(monsno==MONSNO_TAMAGO)){
		return;
	}

	humor=PokeParaGet(pp,ID_PARA_humor,NULL);
	temp = humor;

	humortmp=HumorParaTbl[id];

	temp+=humortmp;

	if(temp<-127){
		temp = -127;
	}else if (temp>127){
		temp = 127;
	}
	humor = temp;
	PokeParaPut(pp,ID_PARA_humor, &humor);
}